package com.lzy.pattern.flyweight;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName: BoxFactory
 * @Description: 享元工厂（Flyweight Factory）角色 ：负责创建和管理享元角色。当客户对象请求一个享元对象时，享元工厂检査系统中是否存在符合要求的享元对象，如果存在则提供给客户；如果不存在的话，则创建一个新的享元对象。
 * @Author: LiuZy
 * @Date: 2022/4/26 20:11
 * @Version: 1.0
 */
public class BoxFactory {

    private static BoxFactory factory = new BoxFactory();

    private static Map<String, AbstractBox> map;

    /**
     * 私有构造方法
     */
    private BoxFactory(){
        map = new HashMap<>();
        map.put("I", new IBox());
        map.put("L", new LBox());
        map.put("O", new OBox());
    }

    public static class SingletonHolder{
        private static final BoxFactory INSTANCE = new BoxFactory();
    }

    public static BoxFactory getInstance(){
        return SingletonHolder.INSTANCE;
    }

    public AbstractBox getBox(String key){
        return map.get(key);
    }

}